package com.zsh.rabbitmq.one;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * @author zsh
 * @Description 生产者，目标发消息
 * @create 2022-04-26 11:16
 */
public class Producer {
    //队列名称
    public static final String QUEUE_NAME = "hello";

    //发消息
    public static void main(String[] args) throws Exception {
        //创建链接工厂
        ConnectionFactory factory = new ConnectionFactory();

        //设置工厂ip 用于链接rabbitmq
        factory.setHost("192.168.200.128");
        //用户名
        factory.setUsername("admin");
        //密码
        factory.setPassword("123456");

        //创建链接
        Connection connection = factory.newConnection();

        //获取通道
        Channel channel = connection.createChannel();

        //创建队列
        /* 参数列表
           1. 队列名称
           2. 队列里面的消息是否持久化(磁盘)true 默认情况下消息存储在内存中 false
           3. 该队列是否只供一个消费者消费 是否进行消费共享 true 多个 false 单个
           4. 是否自动删除，最后一个消费者端口链接之后，该队列是否自动删除，true 自动删除，false 不自动
           5. 其他参数
         */

        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-max-priority",10); //优先级队列 最大 0-255，太大浪费内存

        channel.queueDeclare(QUEUE_NAME, true,false,false,arguments);

        //发消息
//        String msg = "hello world!";

        /* 参数列表
        1. 发送到哪个交换机
        2. 路由的key值是哪个，本次是队列名称
        3. 其他参数
        4. 发送的消息体
         */
        for (int i = 0; i < 10; i++) {
            String msg = "info" + i;
            if (i == 5){
                AMQP.BasicProperties properties = new AMQP.BasicProperties()
                        .builder().priority(5).build();
                channel.basicPublish("",QUEUE_NAME,properties,msg.getBytes());
            }else {
                channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
            }
        }
       // channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());

        System.out.println("消息发送完毕！");
    }
}
